<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
	<meta name="keywords" content="nacos-confd" />
	<meta name="description" content="nacos-confd" />
	<!-- 网页标签标题 -->
	<title>nacos-confd</title>
	<link rel="shortcut icon" href="https://img.alicdn.com/tfs/TB1hgJpHAPoK1RjSZKbXXX1IXXa-64-64.png"/>
	<link rel="stylesheet" href="/build/blogDetail.css" />
</head>
<body>
	<div id="root"><div class="blog-detail-page" data-reactroot=""><header class="header-container header-container-normal"><div class="header-body"><a href="/zh-cn/index.html"><img class="logo" src="/img/nacos_colorful.png"/></a><div class="search search-normal"><span class="icon-search"></span></div><span class="language-switch language-switch-normal">En</span><div class="header-menu"><img class="header-menu-toggle" src="/img/menu_gray.png"/><ul><li class="menu-item menu-item-normal"><a href="/zh-cn/index.html">首页</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/docs/what-is-nacos.html">文档</a></li><li class="menu-item menu-item-normal menu-item-normal-active"><a href="/zh-cn/blog/index.html">博客</a></li><li class="menu-item menu-item-normal"><a href="/zh-cn/community/index.html">社区</a></li><li class="menu-item menu-item-normal"><a href="https://cn.aliyun.com/product/aliware/mse?spm=nacos-website.topbar.0.0.0">企业版Nacos</a><img class="menu-img" src="https://img.alicdn.com/tfs/TB1esl_m.T1gK0jSZFrXXcNCXXa-200-200.png"/></li><li class="menu-item menu-item-normal"><a href="http://console.nacos.io/nacos/index.html">控制台样例</a></li></ul></div></div></header><section class="blog-content markdown-body"><p>为什么要支持confd，老的应用配置管理模式是启动时读取配置文件，然后重新读取配置文件需要应用重启。一般的配置管理系统都是代码侵入性的，应用接入配置管理系统都需要使用对应的SDK来查询和监听数据的变更。对于一些已经成熟的系统来说，接入SDK来实现动态配置管理是很难实现的，Nacos通过引入配置管理工具confd可以实现系统的配置变更做到无代码侵入性。</p>
<p>confd是一个轻量级的配置管理工具，可以通过查询后端存储系统来实现第三方系统的动态配置管理，如Nginx、Tomcat、HAproxy、Docker配置等。confd目前支持的后端有etcd、ZooKeeper等，Nacos
1.1版本通过对confd定制支持Nacos作为后端存储。</p>
<p>confd能够查询和监听后端系统的数据变更，结合配置模版引擎动态更新本地配置文件，保持和后端系统的数据一致，并且能够执行命令或者脚本实现系统的reload或者重启。</p>
<h2>安装confd插件</h2>
<p>confd的安装可以通过源码安装方式，confd基于Go语言编写，其编译安装依赖Go，首先需要确保本地安装了Go，版本不低于v1.10
创建confd目录，下载confd源码，编译生成可执行文件</p>
<pre><code>mkdir -p $GOPATH/src/github.com/kelseyhightower
cd $GOPATH/src/github.com/kelseyhightower
wget https://github.com/nacos-group/nacos-confd/archive/v0.19.1.tar.gz
tar -xvf v0.19.1.tar.gz
mv nacos-confd-0.19.1 confd
cd confd
make
</code></pre>
<p>复制confd文件到bin目录下，启动confd</p>
<pre><code>sudo cp bin/confd /usr/local/bin
confd
</code></pre>
<h2>confd结合Nacos实现nginx配置管理示例</h2>
<p>本文介绍使用Nacos结合confd实现Nginx配置管理，为简单起见以Nginx的黑名单功能为演示示例，Nacos使用官网部署的服务，<a href="http://xn--console-e73k064bojj.nacos.io">域名为console.nacos.io</a>。Nginx的安装可以参考网上文章</p>
<p><img src="https://img.alicdn.com/tfs/TB1X_KhdUz1gK0jSZLeXXb9kVXa-720-405.jpg" alt="image"></p>
<ul>
<li>1.创建confd所需目录</li>
</ul>
<p>confd配置文件默认在/etc/confd中，可以通过参数-confdir指定。目录中包含两个子目录，分别是：conf.d templates</p>
<pre><code>mkdir -p /etc/confd/{conf.d,templates}
</code></pre>
<ul>
<li>2.创建confd配置文件</li>
</ul>
<p>confd会先读取conf.d目录中的配置文件(toml格式)，然后根据文件指定的模板路径去渲染模板。</p>
<pre><code>vim /etc/confd/conf.d/nginx.toml
</code></pre>
<p>内容为如下，其中nginx.conf.tmpl文件为confd的模版文件，keys为模版渲染成配置文件所需的配置内容，/usr/local/nginx/conf/nginx.conf为生成的配置文件</p>
<pre><code>[template]
src = &quot; nginx.conf.tmpl&quot;
dest =
&quot;/usr/local/nginx/conf/nginx.conf&quot;
keys = [
&quot;/nginx/conf&quot;,
]
check_cmd = &quot;/usr/local/nginx/sbin/nginx -t
-c {{.src}}&quot;
reload_cmd = &quot;/usr/local/nginx/sbin/nginx
-s reload&quot;
</code></pre>
<ul>
<li>3.创建模版文件</li>
</ul>
<p>拷贝Nginx原始的配置，增加对应的渲染内容</p>
<pre><code>cp /usr/local/nginx/conf/nginx.conf
/etc/confd/templates/nginx.conf.tmpl
vim /etc/confd/templates/nginx.conf.tmpl
</code></pre>
<p>增加内容为:</p>
<pre><code>···
{{$data := json (getv &quot;/nginx/conf&quot;)}}
{{range $data.blackList}}
deny {{.}};
{{end}}
···
</code></pre>
<ul>
<li>4.在Nacos上创建所需的配置文件</li>
</ul>
<p>在public命名空间创建dataId为nginx.conf的配置文件，group使用默认的DEFAULT_GROUP即可，配置内容为json格式</p>
<pre><code>{
&quot;blackList&quot;:[&quot;10.0.1.104&quot;,&quot;10.0.1.103&quot;]
}
</code></pre>
<p><img src="https://img.alicdn.com/tfs/TB1PSKwdKP2gK0jSZFoXXauIVXa-1986-1024.png" alt="image"></p>
<ul>
<li>5.启动confd</li>
</ul>
<p>启动confd，从Nacos获取配置文件，渲染Nginx配置文件。backend设置成nacos，node指定访问的Nacos服务地址，watch让confd支持动态监听</p>
<pre><code>confd -backend nacos -node http://console.nacos.io:80 -watch
</code></pre>
<ul>
<li>6.查看Nginx配置文件，验证Nginx启动</li>
</ul>
<p>查看生成的/usr/local/nginx/conf/nginx.conf配置文件是否存在如下内容</p>
<pre><code>...
deny 10.0.1.104;

deny 10.0.1.103;
...
</code></pre>
<p>curl命令访问Nginx，验证是否返回正常。http响应状态码为200说明访问Nginx正常</p>
<pre><code>curl http://$IP:8080/ -i
HTTP/1.1 200 OK
...
</code></pre>
<ul>
<li>7.查看本机Ip，加到Nacos配置文件黑名单中</li>
</ul>
<p>假设本机的Ip为30.5.125.107，将本机的Ip加入到Nginx黑名单</p>
<pre><code>{
&quot;blackList&quot;:[&quot;10.0.1.104&quot;,&quot;10.0.1.103&quot;,&quot;30.5.125.107&quot;]
}
</code></pre>
<ul>
<li>8.查看Nginx配置文件，验证黑名单是否生效</li>
</ul>
<p>查看生成的/usr/local/nginx/conf/nginx.conf配置文件是否存在如下内容</p>
<pre><code>...
deny 10.0.1.104;

deny 10.0.1.103;

deny 30.5.125.107;
...
</code></pre>
<p>curl命令访问Nginx，访问应该被拒绝，返回403</p>
<pre><code>curl http://$IP:8080/ -i
HTTP/1.1 403 Forbidden
...
</code></pre>
<h2>总结</h2>
<p>本文介绍了使用Nacos结合confd来做自动化管理，confd作为轻量级的配置管理工具可以做到对第三方系统无代码侵入性。本文只是简单使用Nginx的黑名单功能来演示Nacos+confd的使用方式，当然Nginx还具有限流、反向代理等功能以及其他的系统比如Naproxy、Tomcat、Docker等也同样可以使用Nacos+confd做管理，大家可以到Nacos<a href="https://nacos.io">官网</a>贡献相应的demo或者方案。</p>
</section><footer class="footer-container"><div class="footer-body"><img src="/img/nacos_gray.png"/><div class="cols-container"><div class="col col-12"><h3>愿景</h3><p>Nacos 通过提供简单易用的动态服务发现、服务配置、服务共享与管理等服务基础设施，帮助用户在云原生时代，在私有云、混合云或者公有云等所有云环境中，更好的构建、交付、管理自己的微服务平台，更快的复用和组合业务服务，更快的交付商业创新的价值，从而为用户赢得市场。</p></div><div class="col col-6"><dl><dt>文档</dt><dd><a href="/zh-cn/docs/what-is-nacos.html" target="_self">概览</a></dd><dd><a href="/zh-cn/docs/quick-start.html" target="_self">快速开始</a></dd><dd><a href="/zh-cn/docs/contributing.html" target="_self">开发者指南</a></dd></dl></div><div class="col col-6"><dl><dt>资源</dt><dd><a href="/zh-cn/community/index.html" target="_self">社区</a></dd><dd><a href="https://www.aliyun.com/product/acm?source_type=nacos_pc_20181219" target="_self">云服务 ACM</a></dd><dd><a href="https://www.aliyun.com/product/edas?source_type=nacos_pc_20181219" target="_self">云服务 EDAS</a></dd><dd><a href="https://www.aliyun.com/product/ahas?source_type=nacos_pc_20190225" target="_self">云服务 AHAS</a></dd></dl></div></div><div class="copyright"><span>@ 2018 The Nacos Authors | An Alibaba Middleware (Aliware) Project</span></div></div></footer></div></div>
	<script src="https://f.alicdn.com/react/15.4.1/react-with-addons.min.js"></script>
	<script src="https://f.alicdn.com/react/15.4.1/react-dom.min.js"></script>
	<script>
		window.rootPath = '';
  </script>
	<script src="/build/blogDetail.js"></script>
</body>
</html>